package cn.wolfcode.business.service;

import cn.wolfcode.business.domain.BusAppointment;
import cn.wolfcode.common.core.domain.AjaxResult;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 汽车预约服务接口
 * 定义了所有与预约相关的业务操作方法
 * 这是一个接口，具体的实现在 BusAppointmentServiceImpl 类中
 */
public interface IBusAppointmentService {

    /**
     * 查询预约信息列表
     * 根据条件查询多个预约记录，支持分页和筛选
     *
     * @param busAppointment 查询条件（可以包含客户姓名、电话、状态等）
     * @return 符合条件的预约信息列表
     */
    public List<BusAppointment> selectBusAppointmentList(BusAppointment busAppointment);

    /**
     * 根据ID查询单个预约信息
     * 用于查看预约详情
     *
     * @param id 预约记录的唯一ID
     * @return 对应的预约信息，如果不存在返回null
     */
    public BusAppointment selectBusAppointmentById(Long id);

    /**
     * 新增预约信息
     * 客户提交新的预约申请时调用
     *
     * @param busAppointment 包含预约信息的对象
     * @return 操作结果：1表示成功，0表示失败
     */
    public int insertBusAppointment(BusAppointment busAppointment);

    /**
     * 修改预约信息
     * 客户或管理员修改预约详情时调用
     *
     * @param busAppointment 包含修改后信息的对象
     * @return 操作结果：1表示成功，0表示失败
     */
    public int updateBusAppointment(BusAppointment busAppointment);

    /**
     * 批量删除预约信息
     * 管理员可以同时删除多个预约记录
     *
     * @param ids 要删除的预约ID数组
     * @return 成功删除的记录数量
     */
    public int deleteBusAppointmentByIds(Long[] ids);

    /**
     * 取消预约
     * 客户主动取消预约或管理员帮助取消
     *
     * @param id 要取消的预约ID
     * @return 操作结果：1表示成功，0表示失败
     */
    int cancel(Long id);

    /**
     * 客户到店操作
     * 当客户实际到达店铺时，更新预约状态为"已到店"
     *
     * @param id 预约ID
     * @return 操作结果：1表示成功，0表示失败
     */
    int Arrival(Long id);

    /**
     * 修改预约状态
     * 用于更新预约的各种状态（如已结算、已支付等）
     *
     * @param appointmentId 预约ID
     * @param statusPaid 新的状态值
     */
    public void updateStatus(Long appointmentId, Integer statusPaid);



}
